package com.hospital.register.user.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hospital.register.dto.user.UserAuthDto;
import com.hospital.register.dto.user.UserQueryDto;
import com.hospital.register.model.user.UserInfo;
import com.hospital.register.vo.user.UserQueryVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;

/**
 * 访问用户数据
 *
 * @author 刘逸晖
 */
@Mapper
public interface UserInfoMapper {

    /**
     * 新增用户信息
     *
     * @param userInfo 用户信息
     * @return 是否新增成功
     */
    int insert(UserInfo userInfo);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号
     * @return 用户信息
     */
    UserInfo selectByPhone(@Param("phone") String phone);

    /**
     * 实名认证
     *
     * @param authInfo 认证信息
     * @return 1 表示成功
     */
    int tryAuthentication(@Param("authInfo") UserAuthDto authInfo);

    /**
     * 根据 id 查用户
     *
     * @param id id
     * @return 用户信息
     */
    UserQueryVo selectById(@Param("id") Long id);

    /**
     * 根据条件分页查询用户
     *
     * @param page       页码和每页长度
     * @param conditions 条件
     * @return 结果页
     */
    Page<UserQueryVo> selectPage(Page<UserQueryVo> page, @Param("conditions") UserQueryDto conditions);

    /**
     * 更新用户状态
     *
     * @param id         用户 id
     * @param status     新状态
     * @param updateTime 更新时间
     * @return 更新的记录数
     */
    int updateStatus(@Param("id") Long id, @Param("status") Byte status, @Param("updateTime") Date updateTime);

    /**
     * 根据 id 更新用户的认证状态
     *
     * @param id            用户 id
     * @param oldAuthStatus 旧的认证状态（与数据库一样才会更新）
     * @param newAuthStatus 新的认证状态
     * @param updateTime    更新时间
     * @return 更新的记录数
     */
    int updateAuthStatus(@Param("id") Long id, @Param("oldAuthStatus") Byte oldAuthStatus, @Param("newAuthStatus") Byte newAuthStatus, @Param("updateTime") Date updateTime);

}
